package modulo1.cci;

import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modulo1.cdp.Curso;
import modulo1.cdp.EnumArea;
import modulo1.cdp.EnumTipo;
import modulo1.cgt.CadastroInternoApl;

@WebServlet(name = "CursoCtrl", urlPatterns = {"/Curso"})
public class CursoCtrl extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        RequestDispatcher cih = request.getRequestDispatcher("modulo1/cadint/curso_cadastro.jsp");
        cih.forward(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");
        if (evento != null) {
            if (evento.equals("alterar") || evento.equals("consultar")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    Curso curso = CadastroInternoApl.getInstance().cursoConsultar(id);
                    request.setAttribute("curso", curso);
                } catch (Exception ex) {
                    //TODO Exceção alterar curso
                }
            } else if (evento.equals("excluir")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    CadastroInternoApl.getInstance().cursoExcluir(id);

                    String redirect = "Curso";
                    String mensagem = "Curso excluido com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                    return;
                } catch (Exception ex) {
                    //TODO Exceção excluir curso
                    ex.printStackTrace();
                    String redirect = "Curso";
                    String mensagem = ex.getMessage();
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                    return;
                }
            }

            RequestDispatcher cih = request.getRequestDispatcher("modulo1/cadint/curso_form.jsp");
            cih.forward(request, response);
            return;
        }

        String buscar = request.getParameter("buscar");
        try {
            List<Curso> cursos;
            if (buscar != null) {
                cursos = CadastroInternoApl.getInstance().cursoBuscarNome(buscar);
            } else {
                cursos = CadastroInternoApl.getInstance().cursoBuscar();
            }
            request.setAttribute("cursos", cursos);
        } catch (Exception ex) {
            // TODO Exceção buscar curso
        }

        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");
        if (evento != null) {
            if (evento.equals("inserir") || evento.equals("alterar")) {
                try {
                    Curso c;
                    if (request.getParameter("id") != null) {
                        c = CadastroInternoApl.getInstance().cursoConsultar(Long.parseLong(request.getParameter("id")));
                    } else {
                        c = new Curso();
                    }
                    //TODO Esta alterando mágicamente os campos de duracao total e duracao maxima para o o codigo
                    c.setNome(request.getParameter("nome"));
                    c.setAbreviacao(request.getParameter("abreviacao"));
                    c.setCodigo(Integer.parseInt(request.getParameter("codigo")));
                    c.setTipo(EnumTipo.valueOf(request.getParameter("tipo")));
                    c.setArea(EnumArea.valueOf(request.getParameter("area")));
                    c.setDuracaoTotal(Integer.parseInt(request.getParameter("duracaototal")));
                    c.setDuracaoMaxima(Integer.parseInt(request.getParameter("duracaomaxima")));
                    c.setMediaAprovacao(Float.parseFloat(request.getParameter("mediaaprovacao")));
                    c.setMediaFrequencia(Float.parseFloat(request.getParameter("mediafrequencia")));
                    CadastroInternoApl.getInstance().cursoSalvar(c);

                    String redirect = "Curso";
                    String mensagem = "Curso salvo com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                } catch (Exception ex) {
                    ex.printStackTrace();
                    String redirect = "Curso";
                    //String mensagem = ex.getMessage();
                    String mensagem = "Erro ao salvar curso.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                }
                return;
            }
        }

        processRequest(request, response);
    }
}
